本篇是看 Go Concurrency Patterns 的心得
簡報網址:https://talks.golang.org/2012/concurrency.slide
在影片的前段,在稍微提到了 concurrency 和 parallism ,這裡大部分的內容和 Concurrency is not Parallelism 有重疊的部分,Day6 到 Day10 也寫過這篇演講的內容,這篇我就不多提
以下我會從投影片裏的 Pattern 開始
Rob Pike 在這提到,這裡的 Pattern 和 OOP 的 Pattern 不一樣,這裡只是,只是想給出一些 concurrency 的例子
在 function 內部回傳一個 receive-only channel,從外部看來就是提供一個 generator
這時就能把這個 function 當成一個服務一樣,可以提供給多個人,但這個程式會有一些問題,Joe 和 Ann 一定會是 Joe 先印出來然後再換 Ann,這就不符合預期:要是 Ann 可能已經 ready 好要接收值了,但是他還是一定要等 Joe ready 好了才能輪到他。
Joe 0
Ann 0
Joe 1
Ann 1
Joe 2
Ann 2
Joe 3
Ann 3
Joe 4
Ann 4
我們可以寫一個 Fan in function 或是稱它為 Multiplexer。誰先的 channel 先 ready 了,就先印,這就解決剛剛的問題了。
來個示意圖
到下一頁講解時我就卡住了,看了一下子沒看懂,今天就先這樣吧